package com.linrui.gift.service.impl;

import com.linrui.gift.client.TenantClient;
import com.linrui.gift.domain.GoodsSpu;
import com.linrui.gift.domain.GoodsSpuOnsaleDetail;
import com.linrui.gift.exception.BusinessException;
import com.linrui.gift.exception.code.ErrorCode;
import com.linrui.gift.mapper.GoodsSpuMapper;
import com.linrui.gift.mapper.GoodsSpuOnsaleDetailMapper;
import com.linrui.gift.service.IGoodsSpuService;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * <p>
 * spu表 服务实现类
 * </p>
 *
 * @author linrui
 * @since 2022-12-19
 */
@Service
public class GoodsSpuServiceImpl extends ServiceImpl<GoodsSpuMapper, GoodsSpu> implements IGoodsSpuService {

    @Autowired
    private GoodsSpuMapper goodsSpuMapper;
    @Autowired
    private GoodsSpuOnsaleDetailMapper goodsSpuOnsaleDetailMapper;
    @Autowired
    private TenantClient tenantClient;
    @Override
    @Transactional
    public void onsale(List<Long> ids) {
        //判断是否审核通过

        //参数判空
        if (ids == null || ids.size()<1){
            throw new BusinessException(ErrorCode.ERROR_CODE_400.toString());
        }
        //判断是否已经上架
        List<GoodsSpu> goodsSpus = goodsSpuMapper.selectByIds(ids);
        if (goodsSpus != null || goodsSpus.size()>1){
            throw new RuntimeException("请勿重复上架");
        }
        //修改数据库状态
        goodsSpuMapper.onsale(ids);
        //添加上架详情数据,便于Canal同步


        //添加上架日志
        GoodsSpuOnsaleDetail goodsSpuOnsaleDetail = new GoodsSpuOnsaleDetail();
        for (GoodsSpu goodsSpu : goodsSpus) {
            goodsSpuOnsaleDetail.setSpuId(goodsSpu.getId());
            goodsSpuOnsaleDetail.setName(goodsSpu.getGoodsName());
            goodsSpuOnsaleDetail.setTenantId(goodsSpu.getTenantId());
            tenantClient.get(goodsSpu.getTenantId());
            goodsSpuOnsaleDetail.setMaxPrice(goodsSpu.getHighPrice());
            goodsSpuOnsaleDetail.setMinPrice(goodsSpu.getLowPrice());
            goodsSpuOnsaleDetailMapper.insert(goodsSpuOnsaleDetail);
        }

    }

    @Override
    @Transactional
    public void offsale(List<Long> ids) {
        if (ids == null || ids.size()<1){
            throw new BusinessException(ErrorCode.ERROR_CODE_400.toString());
        }
        //判断是否已经下架
        List<GoodsSpu> goodsSpus = goodsSpuMapper.selectByIds(ids);
        if (goodsSpus == null || goodsSpus.size()<1){
            throw new RuntimeException("请勿重复下架");
        }
        //修改数据库状态
        goodsSpuMapper.offsale(ids);
        //删除下架详情数据,便于Canal同步

        //添加上下架日志
        GoodsSpuOnsaleDetail goodsSpuOnsaleDetail = new GoodsSpuOnsaleDetail();
        for (GoodsSpu goodsSpu : goodsSpus) {
            goodsSpuOnsaleDetail.setSpuId(goodsSpu.getId());
            goodsSpuOnsaleDetail.setName(goodsSpu.getGoodsName());
            goodsSpuOnsaleDetail.setTenantId(goodsSpu.getTenantId());
            tenantClient.get(goodsSpu.getTenantId());
            goodsSpuOnsaleDetail.setMaxPrice(goodsSpu.getHighPrice());
            goodsSpuOnsaleDetail.setMinPrice(goodsSpu.getLowPrice());
            goodsSpuOnsaleDetailMapper.insert(goodsSpuOnsaleDetail);
        }
    }
}
